package colin.project.sso.server.business.service.impl;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.convert.ConvertException;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author joker
 * @Title CommonService
 * @Description
 * @Date 2019/5/20 12:03 PM
 * @Since
 * @Version 1.0.0
 */
public class CommonService {

    /**
     * 转换为ArrayList，元素类型默认Object
     *
     * @param value 被转换的值
     * @return {@link List}
     * @since 4.1.11
     */
    public List<?> toList(Object value) {
        return Convert.convert(List.class, value);
    }

    /**
     * 转换为ArrayList
     *
     * @param <T>         元素类型
     * @param elementType 集合中元素类型
     * @param value       被转换的值
     * @return {@link List}
     * @since 4.1.20
     */
    @SuppressWarnings("unchecked")
    public <T> List<T> toList(Class<T> elementType, Object value) {
        return (List<T>) Convert.toCollection(ArrayList.class, elementType, value);
    }

    /**
     * 转换值为指定类型
     *
     * @param <T> 目标类型
     * @param type 类型
     * @param value 值
     * @return 转换后的值
     * @since 4.0.0
     * @throws ConvertException 转换器不存在
     */
    public <T> T convert(Class<T> type, Object value) throws ConvertException{
        return Convert.convert((Type)type, value);
    }

}
